package com.maven.orm.hibernate;

import java.util.List;

import org.hibernate.SessionFactory;


/**
 * 封装dao的基本操作
 * @author Administrator
 * @param <T>
 */
public interface DaoBase<T>{
	
	/**
	 * 注入sessionFactory
	 * @param sessionFactory
	 */
	public void setSuperSessionFactory(SessionFactory sessionFactory);
	
	/**
	 * 返回sessionFactory
	 * @return
	 */
	public SessionFactory getCurrentSessionFactory();
	
	/**
	 * 保存
	 * @param obj
	 * @return
	 */
	public boolean save(T obj);
	
	/**
	 * 更新
	 * @param obj
	 * @return
	 */
	public boolean update(T obj);
	
	/**
	 * 删除
	 * @param id
	 * @return
	 */
	public boolean delete(Integer id);
	
	/**
	 * 删除
	 * @param id
	 * @return
	 */
	public boolean delete(String id);
	
	/**
	 * 删除
	 * @param obj
	 * @return
	 */
	public boolean delete(T obj);
	
	/**
	 * 根据ID返回实体
	 * @param id
	 * @return
	 */
	public T findById(Integer id);
	
	/**
	 * 根据ID返回实体
	 * @param id
	 * @return
	 */
	public T findById(String id);
	
	/**
	 * 根据多个ID删除记录
	 * @param idList
	 * @return
	 */
	public boolean deleteByIdList(Integer[] idList);
	
	/**
	 * 查询所有
	 * @return
	 */
	public List<T> findAll();
	
	/**
	 * 带条件查询
	 * @param hql
	 * @param value
	 * @return
	 */
	public List<T> findAll(String hql,Object[] value);
	
	/**
	 * 分页查询
	 * @param hql
	 * @param beginIndex
	 * @param pageSize
	 * @return
	 */
	public List<T> findByPage(final Integer beginIndex,final Integer pageSize);
	
	/**
	 * 带查询条件的分页查询
	 * @param hql
	 * @param paras
	 * @param beginIndex
	 * @param pageSize
	 * @return
	 */
	public List<T> findByPage(final String hql,Object[] paras,final int beginIndex,final int pageSize);
	
	/**
	 * 获取页大小
	 * @param hql
	 * @param paras
	 * @return
	 */
	public Integer findByPage(String hql,Object[] paras);
	
	/**
	 * 分页查询返回JSON
	 * @param beginIndex	第几页
	 * @param pageSize		每页显示的记录
	 * @return返回JSON
	 */
	public String findByPageToJSON(final int beginIndex,final int pageSize);
	
}
